haskell

您所在的位置:网站首页 pure land是什么意思 haskell

haskell

2024-07-10 01:28| 来源: 网络整理| 查看: 265

换句话说,是什么让语言变得纯粹?

例如,Smalltalk 被认为是一种纯面向对象的语言。 Haskell 和 Lisp 可以说是纯函数式语言。

当我们说纯粹时,这是否意味着它们不能用于其他编程范式(这与事实相去甚远),或者是否意味着它们被设计用于“纯粹”的 X 范式?

最佳答案

纯粹这个词在不同的上下文中有不同的含义。

函数式编程

当人们谈论 Haskell 是一门纯语言时,他们的意思是它拥有 referential transparency .也就是说,您可以用它的值替换任何表达式而不改变程序的含义。例如,在 Haskell 中:

square :: Int -> Int square x = x * x main = print (square 4)

表达式 square 4 可以用它的值 (16) 替换而不改变程序的含义。另一方面,在这段 Java 代码中:

public int square(int x) { System.out.println("Done!"); return (x*x); } public static void main(String [] args) { System.out.println(square(4)); }

你不能用它的值 (16) 替换 square(4) 因为它会改变程序的意义 - 它不会再打印 Done! 到标准输出。在 Haskell 中,函数不可能有副作用,例如打印到标准输出或更改内存位置,因此强制执行引用透明性。

请注意,对于纯粹的这种含义,Lisp 不是一种纯函数式语言,因为它的函数可能有副作用(如果你想挑剔的话,Haskell 不是一种纯函数式语言,因为unsafePerformIO 的存在,但每个人都知道,如果您使用该函数,您将陷入更恶劣的 hell 圈之一)。

当然,在不纯的语言中采用纯风格总是有可能的,许多程序员会这样做是为了更容易推理他们的程序。只是引用透明性不是由编译器强制执行的,因为它是在纯语言中。

纯函数式语言的例子包括 Haskell , Clean和 Miranda .不纯函数式语言的示例包括 OCaml , F#和 Scheme .

面向对象编程

当人们谈论 Smalltalk 或 Ruby 是一种纯面向对象的语言时,他们的意思是对象和原始值之间没有区别。在 Smalltalk 和 Ruby 中,整数、 bool 值和字符等值也是对象,因为它们可以接收消息 (Smalltalk) 或具有方法 (Ruby)。例如,你可以这样做

1.to_s

在 Ruby 中,即调用整数 1 的方法将其转换为字符串。将其与像 Java 这样的“不纯”OO 语言进行比较,其中有对象(类的实例,并且可以有方法等)和原始值(例如 int、double, bool,不能有方法)。

当 OO 语言是纯语言时,人们常说“一切都是对象”,这并非严格意义上的正确(例如,if 语句不是对象)但是正确地说“每个值都是一个对象”。

纯面向对象语言的例子包括Ruby和 Smalltalk .不纯的面向对象语言的示例包括 Java和 C++ .

关于haskell - 在编程语言和范例的上下文中, "Pure"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11607927/



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3